/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.istia.gesstages.dao.file.persistence;

import fr.istia.gesstages.exception.PortailException;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author usrlocal
 */
public class BinaryFilePersister<T> implements FilePersister<T> {

    public List<T> readAll(Class<T> classe, FileInputStream fis) {
        List<T> objectList = new ArrayList<T>();
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(fis);
            Object o;
            while ((o = ois.readObject()) != null) {
                T obj = classe.cast(o);
                objectList.add(obj);
            }
        } catch (IOException ex) {
        } catch (ClassNotFoundException ex2) {
            throw new PortailException("Le fichier spécifié ne contient pas de données du type <" + classe.getName() + ">", ex2);
        } finally {
            try {
                if(ois != null)
                    ois.close();
            } catch (IOException ex) {}
        }
        return objectList;
    }

    public void writeAll(List<T> entities, FileOutputStream fos) {
        try {
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            for(T obj : entities){
                oos.writeObject(obj);
            }
        } catch (IOException ex) {
            throw new PortailException("Erreur lors de la lecture du fichier", ex);
        }
    }
}
